#include <pthread.h>
#include <stdio.h>
#include <unistd.h>



void* test1(void* arg) 
{
    while (1) 
    {
        printf("Normal thread running...\n");
        sleep(1);
    }
    return NULL;
}

void* test2(void* arg) 
{
    sleep(2);  // 让正常线程先运行
    printf("Crash thread will cause SIGSEGV!\n");
    int* ptr = NULL;
    *ptr = 42;  // 故意解引用空指针，触发段错误
    return NULL;
}

int main() 
{
    pthread_t t1, t2;
    pthread_create(&t1, NULL, test1, NULL);
    pthread_create(&t2, NULL, test2, NULL);
    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    return 0;
}

// int counter = 0;  // 全局变量，共享数据

// void test() 
// {
//     counter++; 
//     printf("Counter: %d\n", counter);
// }

// void* func(void* arg) 
// {
//     for (int i = 0; i < 10; i++) 
//     {
//         test();
//     }
//     return NULL;
// }

// int main() {
//     pthread_t t1, t2;
//     pthread_create(&t1, NULL, func, NULL);
//     pthread_create(&t2, NULL, func, NULL);
//     pthread_join(t1, NULL);
//     pthread_join(t2, NULL);
//     printf("Final counter: %d\n", counter);
//     return 0;
// }

// void print_hello() 
// {
//     printf("Hello from thread!\n");
// }

// void* func(void* arg) 
// {
//     print_hello();  // 所有线程调用同一个函数
//     return NULL;
// }

// int main() 
// {
//     pthread_t t1, t2;
//     pthread_create(&t1, NULL, func, NULL);
//     pthread_create(&t2, NULL, func, NULL);
//     pthread_join(t1, NULL);
//     pthread_join(t2, NULL);
//     return 0;
// }

// void* print_thread(void* arg) {
//     for (int i = 0; i < 10; i++)
//      {
//         printf("Thread %ld: %d\n", (long)arg, i);  // 不加锁，直接写入 stdout
//     }
//     return NULL;
// }

// int main() 
// {
//     pthread_t t1, t2;
//     pthread_create(&t1, NULL, print_thread, (void*)1);
//     pthread_create(&t2, NULL, print_thread, (void*)2);
//     pthread_join(t1, NULL);//该函数我们后面会讲
//     pthread_join(t2, NULL);
//     return 0;
// }

// void* thread_func(void* arg) 
// {
//     printf("新线程运行\n");
//     return NULL;
// }

// int main() 
// {
//     pthread_t tid;
//     pthread_create(&tid, NULL, thread_func, NULL);
//     printf("主线程运行\n");
//     pthread_join(tid, NULL);  // 等待新线程结束
//     return 0;
// }